package com.designpatterns.proxypattern.interceptor;

import java.lang.reflect.Method;

public interface Interceptor {

    /**
     * 在真实对象方法前调用
     * @param proxy 代理对象
     * @param target 真是对象
     * @param method 方法
     * @param args 方法参数
     * @return
     */
    boolean before(Object proxy, Object target, Method method, Object[] args);

    /**
     * 在before方法返回为false的情况下调用，取代真实方法
     */
    void repalce(Object proxy, Object target, Method method, Object[] args);

    /**
     * 在真实对象方法和around方法调用后调用
     * @param proxy
     * @param target
     * @param method
     * @param args
     * @return
     */
    void after(Object proxy, Object target, Method method, Object[] args);
}